# -*- coding: utf-8 -*-

# 问题描述
# 判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数

# 示例 1:
# 输入: 121
# 输出: true

# 示例 2:
# 输入: -121
# 输出: false
# 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数

# 示例 3:
# 输入: 10
# 输出: false
# 解释: 从右向左读, 为 01 。因此它不是一个回文数

# 进阶:
# 你能不将整数转为字符串来解决这个问题吗？

# # 一遍过，虽然题目简单些，但是Yeah! Yeah!
# class Solution(object):
#     def isPalindrome(self, x):
#         """
#         :type x: int
#         :rtype: bool
#         """
#         if x < 0:
#             return False;
#         value = str(x);
#         begin = 0;
#         end = len(value) - 1;
#         while begin < end:
#             if value[begin] != value[end]:
#                 return False;
#             begin += 1;
#             end -= 1;
#         return True;

# # 进阶不使用字符串
# # 解题中遇到的错误
# # 没有考虑遇到 1000021 1000030001这样的情况
# class Solution(object):
#     def isPalindrome(self, x):
#         """
#         :type x: int
#         :rtype: bool
#         """
#         if x < 0:
#             return False;

#         digit = 0;
#         digit_temp = x;
#         while digit_temp != 0:
#             digit_temp /= 10;
#             digit += 1;

#         if digit == 1:
#             return True;

#         while digit > 0 and x / (10 ** (digit - 1)) == x % 10:
#             x -= x / (10 ** (digit - 1)) * (10 ** (digit - 1));
#             x /= 10;
#             digit -= 2;
#             while digit > 0 and x < 10 ** (digit - 1):
#                 print [x, digit];
#                 if x % 10 == 0:
#                     x /= 10;
#                     digit -= 2;
#                 else:
#                     return False;
#                 print x;

#         if x < 10:
#             return True;

#         return False;

# 阅读官方提供的解决方案
# 思路是翻转一半位数的数字，然后和剩余数字进行比较
class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if x < 0 or (x > 0 and x % 10 == 0):
            return False;

        reversal = 0;
        while reversal < x:
            reversal = reversal * 10 + x % 10;
            x /= 10;

        return reversal == x or reversal / 10 == x;


t = Solution();
print t.isPalindrome(0);